using System;
using System.ComponentModel.DataAnnotations.Schema;
using hao_Common.Dapper.Repository;

namespace hao_Model
{
    /// <summary>
    /// 用户收货地址实体类（字段映射修复后版本）
    /// </summary>
    [Table("user_addresses")]
    public class Address : ISoftDelete
    {
        /// <summary>
        /// 地址ID
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 用户ID
        /// </summary>
        public Guid UserId { get; set; }

        /// <summary>
        /// 收货人姓名
        /// </summary>
        public string ReceiverName { get; set; }

        /// <summary>
        /// 收货人手机号
        /// </summary>
        public string ReceiverPhone { get; set; }

        /// <summary>
        /// 省份
        /// </summary>
        public string Province { get; set; }

        /// <summary>
        /// 城市
        /// </summary>
        public string City { get; set; }

        /// <summary>
        /// 区/县
        /// </summary>
        public string District { get; set; }

        /// <summary>
        /// 详细地址
        /// </summary>
        public string DetailAddress { get; set; }

        /// <summary>
        /// 邮政编码
        /// </summary>
        public string PostalCode { get; set; }

        /// <summary>
        /// 是否为默认地址
        /// </summary>
        public bool IsDefault { get; set; }

        /// <summary>
        /// 地址标签（如：家、公司、学校等）
        /// </summary>
        public string AddressLabel { get; set; }

        /// <summary>
        /// 经度
        /// </summary>
        public decimal? Longitude { get; set; }

        /// <summary>
        /// 纬度
        /// </summary>
        public decimal? Latitude { get; set; }

        /// <summary>
        /// 状态：1-正常，0-删除
        /// </summary>
        public int Status { get; set; } = 1;

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime? UpdateTime { get; set; }

        /// <summary>
        /// 软删除标记 (映射到Status字段: 0=删除, 1=正常)
        /// </summary>
        [NotMapped]
        public bool IsDeleted 
        { 
            get => Status == 0; 
            set => Status = value ? 0 : 1; 
        }

        /// <summary>
        /// 完整地址（省+市+区+详细地址）
        /// </summary>
        [NotMapped]
        public string FullAddress => $"{Province}{City}{District}{DetailAddress}";
    }
}

/*
使用说明：
1. 执行 fix_address_column_mapping.sql 脚本修改数据库字段名
2. 用此文件内容替换原有的 Address.cs 文件
3. 重新编译项目
4. 测试地址相关功能

主要变更：
- 移除了所有 [Column] 特性，因为数据库字段名已与属性名一致
- 保留了 [Table] 和 [NotMapped] 特性
- 字段映射现在依赖约定：属性名直接对应数据库字段名
*/